//
// Description: 900. 整数划分
// Created by Loading on 2022/6/3.
//

#include <bits/stdc++.h>

using namespace std;

constexpr int N = 1010, MOD = 1e9 + 7;

// dp[i] 表示整数 i 的划分方案数
//int dp[N];

// dp[i][j] 表示总和为 i，划分方案为 j 个数的方案数
int dp[N][N];

int main() {
    int n;
    cin >> n;

    /* 算法1，类似完全背包解法 */
//    // 0 的划分方案只有一种
//    dp[0] = 1;
//    for (int i = 1; i <= n; ++i) {
//        for (int j = i; j <= n; ++j) {
//            // 选 0 个 i + 选其他数量个 i
//            dp[j] = (dp[j] + dp[j - i]) % MOD;
//        }
//    }
//
//    cout << dp[n] << endl;

    /* 算法2，其他dp解法 */
    // 总和为 0，0 个数的方案数只有一种
    dp[0][0] = 1;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= i; ++j) {
            // j 个数中最小值为 1 的方案数为 dp[i - 1][j - 1]，将这个 1 去掉，即 dp[i - 1][j - 1]
            // j 个数中最小值大于 1 的方案数为 dp[i - j][j]，将每个数都减 1，总和减 j，即 dp[i - j][j]
            dp[i][j] = (dp[i - 1][j - 1] + dp[i - j][j]) % MOD;
        }
    }

    // 所有方案累加
    int res = 0;
    for (int i = 1; i <= n; ++i) {
        res = (res + dp[n][i]) % MOD;
    }

    cout << res << endl;

    return 0;
}